草庐IT

c++ - Visual Studio 和 Boost::Test

全部标签

c++ - Visual Studio 2010 C++ : malloc()/HeapAlloc always allocates new page for even smallest alloc size

我有一个相当大的C/C++项目,我一直在试图找出它消耗过多内存的原因(通过任务管理器中的“工作集”判断)。我终于找到了奇怪的行为,即使是最小的malloc()请求,它也会分配一个全新的4k页面。像这样的代码for(intbla=0;bla这应该会增加区区10KB的内存消耗,最终会增加4MB,因为它分配了1000个4kB。真正令人沮丧的部分是我无法将其作为独立文件重现。仅包含上述代码的小型应用程序就可以正常工作。只有大项目才会表现出错误的行为。直接回答一些明显的建议:我正在引入与大项目相同的库,并确保编译标志相同"new"的行为方式相同在Debug和Release模式下都会发生我真的追踪

c++ - mmap如何分配超过20Gb?

我尝试使用mmap函数在虚拟空间中分配大量内存。我的需求是大约30Gb,但它不能。我尝试使用20Gb,结果相同。我在具有60GbRAM的OVH64位机器服务器上执行了我的测试。我的测试代码:#include#include#include#includeintmain(){void*r=NULL;printf("%lu\n",sizeof(size_t));r=mmap(NULL,((size_t)20)*1024*1024*1024,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANONYMOUS,-1,0);printf("%d%s\n",r==MAP_

c++ - 是否有可能从 gcc 或 clang 获得 Lexer 输出?

是否可以让clang或gcc显示词法分析阶段的结果? 最佳答案 虽然解析器doespollthelexer如果没有适当的“词法分析阶段”,这并不意味着您不能在词法分析时转储token。这是通过命令完成的:clang-fsyntax-only-Xclang-dump-tokenscode.c 关于c++-是否有可能从gcc或clang获得Lexer输出?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/

c++ - GCC Address Sanitizer - 将库函数列入黑名单(特别是 boost::test)

我所有的单元测试代码都基于boost::test。我刚刚尝试了GCCAddresssanitizer,它报告了boost::test的一些问题:==25309==ERROR:AddressSanitizer:heap-use-after-freeonaddress0xf5801344atpc0x8259412bp0xff9966c8sp0xff9966bcREADofsize4at0xf5801344threadT0#00x8259411inboost::unit_test::framework::run(unsignedlong,bool)../common/lib/boost/bo

c++ - CMake:如果找不到,自动 boost 下载和构建

我想在我的项目中有一个故障安全设置。我真的不想在每次设置东西时都安装boost和其他库。如果没有找到所需的Boost版本,cmake会下载并编译boost并将该版本用于项目,这将是非常棒的。有没有简单的可能性?我找到了this在女佣安全项目中。但我对cmake经验不足,不知道如何使用它。 最佳答案 你可以使用this查找我创建的模块。下载FindBoost.cmake文件。将其保存在项目中的某处;例如,在名为cmake的目录中。将上述目录添加到CMAKE_MODULE_PATH。这是实现此目的的一种方法:list(APPENDCMA

c++ - 将 unique_ptr 引用传递给 boost::bind?

我在CentOS6.6(gcc4.4.7)上使用Boost.Asio(1.41)进行开发。我希望io_service在启动时调用manger对象m中的成员函数run()。我尝试编译的代码如下所示:#include#include#includeboost::asio::io_serviceio;std::unique_ptrm;m=std::make_unique;io.post(boost::bind(&manager::run,&m));gcc对boost::bind语句进行了调整,其中包括:/usr/include/boost/bind/mem_fn_template.hpp:4

c++ - Boost 的属性树 : deleting a child knowing its path

是否可以轻松地从通过其路径已知的属性树中删除子项(及其最终的子项)?以下内容autochild=ptree.get_child(path);child.clear();实际上并没有删除子项,只是删除了它的内容。erase成员函数接受一个迭代器或一个键。我不知道有什么简单的方法可以找到与路径对应的迭代器,而无需遍历树。可以通过在点字符处拆分路径并删除剩余部分来找到“根”子级。然而,有没有更容易/更短的方式到达那里? 最佳答案 你可以这样做:ptree.get_child("path.to").erase("child");请注意,这会

c++ - 使用 Boost find_last 查找任何

这是一个返回指向C字符串路径中文件名部分的指针的函数。StringT应该是char*或wchar_t*。templateStringTGetFilenamePos(StringTpath){typedefboost::iterator_range::type>StringItRange;StringItRangelastFound=boost::find_last(path,L"\\");StringTfilename=lastFound.empty()?path:lastFound.end();returnfilename;}我不仅想搜索\,还想搜索/,有没有一种方法可以用Boost

c++ - boost::archive::binary_oarchive 如何处理枚举?

我有以下枚举enumExample:uint8_t{First=1,Second=2,};和一个字符串流:std::stringstreamstream;boost::archive::binary_oarchivear(stream);现在我注意到,如果我序列化一个枚举:arboost序列化4字节(在本例中为0x01、0x00、0x00、0x00)位,而不是uint8_t所需的8位(0x01)。有什么办法可以避免这种情况吗?我的意思是,我知道我可以将该枚举转换为uint8_t,但这种接缝不是很巧妙(如果必须这样做,我必须更改很多东西)。谢谢和问候 最佳答案

c++ - 如何将 boost::iostreams::mapped_file_source 与 gzip 压缩的输入文件一起使用

我正在使用boost::iostreams::mapped_file_source将文本文件从特定位置读取到特定位置并操作每一行(使用g++-Wall-O3-lboost_iostreams-otestmain.cpp编译):#include#include#includeintmain(){boost::iostreams::mapped_file_sourcef_read;f_read.open("in.txt");longlongintalignment_offset(0);//setthestartpointconstchar*pt_current(f_read.data()+